package com.example.kotlindemo.arrayandcollection

/**
 *  不支持协变，java中支持。
 *
 *      val strs:Array<String> =  arrayOf("a","b","c")
 *      val anys<any> = strs //compile-error type mismatch
 *      子数组对象不能付给父类数组对象
 *
 *   Java中：
 *      String[] strs = {"a", "b", "c"};
 *      Object[] objs = strs; // success
 *
 */
class ArraySample {

    val arrayStr :Array<String> = arrayOf("a","b","c")
    val intArray = intArrayOf(1, 2, 3)

//             *******************【数组】与【集合】的操作符*********************

//1. forEach：遍历没一个元素
    fun forEachTest(){
        //lambda表达式，i表示数组的没一个元素
        arrayStr.forEach { i ->
            println(i + "")
        }
    }

//2. filter:对每个元素进行过滤，如果lambda表达式中的条件成立则留下元素，
//否则剔除，【最终 生成新的集合】
fun filterTest() {
    val newList: List<Int> = intArray.filter { i ->
        i != 1
    }
    newList.forEach { i ->
        println("$i 过滤后的值")
    }
}


//3. map:遍历每个元素并【执行给定表达式】，【最终 生成新的集合】
    val newListByMap:List<Int> = intArray.map { i->
    i+1
}

    val newListByMap2:List<String> = arrayStr.map { i->
        i+"操作集合"
    }

//4. flapMap:遍历每个元素，并为每个元素 【创建新的集合】 ，最后合并到一个集合中
//          [1, 2, 3]
// {"2", "a" , "3", "a", "4", "a"}

    fun  flatMapTest(){
        val flatMap = intArray.flatMap { i ->
           listOf("${i + 1}", "a") // 生成新集合
        }
        flatMap.forEach { i->
            println(i+"flatMap 生成的新集合")
        }
    }









}